# -*- coding: UTF-8 -*-

#-----------------------------------------------------------------------------
# Name:         Class_ABC_Crypt.py
# Purpose:      Classe de cryptage des logs
#               
#
# Author:      ABCPro
#
# Created:     2007/04/18
# Copyright:   (c) 2007
# Licence:     <your licence>
#-----------------------------------------------------------------------------

import os,sys,time,datetime,base64

if hasattr(sys,"setdefaultencoding"):
    sys.setdefaultencoding("latin-1")
else:
   pass # site.py did it already for us and everything should work


Code = {'AOO' : 'Ajout d\'un repertoire', 'BOO' : 'Suppression d\'un repertoire',
        'COO' : 'Modification(s) sauvegardee(s)', 'DOO' : 'Modification(s) non-sauvegardee(s)',
        'EOO' : 'Lancement d\'une sauvegarde', 'FOO' : 'Retour sync pour :',
        'FAO' : 'Code==>  ', 'GOO' : 'Retour flag :', 'GAO' : 'Code==> ','1' : '\b  /!\ Erreur de syntaxe ou d\'utilisation /!\ ','2' : '\b  /!\ Incompatibilite de protocole/!\ ',
         '3' : '  \b  /!\  Erreurs lors de la selection des fichiers et des repertoires d\'entree/sortie/!\ ',
         '4' : '\b  /!\ Action non supportee : une tentative de manipulation de fichiers 64-bits sur une plate-forme qui ne supporte pas ; ou une option qui est supportee par le client mais pas par le serveur./!\ ',
         '5' : '\b  /!\ Erreur lors du demarrage du protocole client-serveur/!\ ',
         '6' : '\b  /!\ Demon incapable d\'ecrire dans le fichier de log/!\ ',
         '10' : '\b  /!\ Erreur dans la socket E/S','11' : '\b  Erreur d\'E/S fichier/!\ ',
         '12' : ' \b  /!\ Erreur dans le flux de donnee du protocole rsync /!\ ', '13' : '\b/!\ Erreur avec les diagnostics du programme/!\ ',
         '14' : '\b  /!\ Erreur dans le code IPC', '20' : '\b  SIGUSR1 ou SIGINT reçu/!\ ',
         '21' : '\b  /!\ Une erreur retournee par waitpid()/!\ ','22' : '\b  /!\ Erreur lors de l\'allocation des tampons de memoire principaux/!\ ',
         '23' : '\b  /!\ Transfert partiel dût a une erreur/!\ ','24' : '\b  /!\ Transfert partiel dût a la disparition d\'un fichier source/!\  ',
         '25' : '\b  /!\ La limite --max-delete a ete atteinte/!\ ','30' : '\b  /!\ Depassement du temps d\'attente maximal lors d\'envoi/reception de donnees/!\ ','127':'Erreur type E/S 4078 D ', 
         '255' : '\b  /!\ Erreur de communication avec le serveur via le canal ssh, merci de vérifier votre connexion/!\ '}
               

class ABC_Crypt :
    
 
        

  def Crypt (self,text):
      '''Fonction de Cryptage en base64 des logs
         On inclus la date exact de chaque ligne du code
         et on crypt
         @param:
             text : La ligne a encoder en base64
      '''   
      t = time.localtime(time.time())#Structure time
      Hour = time.strftime("%d-%B-%Y   %H:%M:%S", t)  #Date et heure
      texte = ""
      #encodage en base64 de la date ainsi que de la ligne de log
      #texte = base64.encodestring(str(Hour))+ base64.encodestring(text)
      try:text = text %(Code)
      except:text=text
      return str(text)
  
  
  def DeCrypt (self,text):
      '''Fonction de decryptage du log
         utilisée dans les divers lecteur de la suite logiciel
         @param:
             text : la ligne de log a décrypter
      '''
      texte = ""
      #Decodage de la ligne de log
      #texte = base64.decodestring(text)
      return str(texte)


  def LogMes (self,Fiche,Mes):
        '''
        Fonction principale 
        permet l'encodage et l'ecriture de la ligne cryptée dans un fichier
        @param :
            Fiche : le fichier ou les log sont ecrit
            Mes : Le message a crypter
        '''
        File = open(Fiche,"a")
        try:
          Mes = self.Crypt(Mes)
          File.write(Mes)
        except:pass
        File.close()
 
